/**
 * @Description: 对象扁平化,取出所有非对象属性
 * @author zhaojiuyi
 * @date 2023/4/10
 */
export function flattenObject(obj) {
    return Object.keys(obj).reduce((acc, key) => {
        if (typeof obj[key] === "object" && obj[key] !== null && !(obj[key] instanceof Array)) {
            Object.assign(acc, flattenObject(obj[key]));
        } else {
            acc[key] = obj[key];
        }
        return acc;
    }, {});
}

/**
 * @Description: 数组扁平化，将数组中的数组展开为一层
 * @author zhaojiuyi
 * @date 2023/5/5
 */
export function flattenArray(list: any[]): any[] {
    return list.reduce((newList, item) => {
        if (item instanceof Array) {
            return [...newList,...flattenArray(item)]
        }else{
            return [...newList,item]
        }
    }, [])
}


/**
 * @Description: 对象类型的数组去重
 * @author zhaojiuyi
 * @date 2023/4/11
 * @param {Object[]} list 对象数组
 * @param {string} key 去重的标识
 */
export function arrayDeduplication(list: object[], key: any): any[] {
    let map = new Map();
    for (let obj of list) {
        if (!map.has(obj[key])) {
            map.set(obj[key], obj);
        }
    }
    return [...map.values()]
}

/**
 * @Description: 指定位数的数字验证码
 * @author zhaojiuyi
 * @date 2023/4/15
 * @param {number} len 位数（最大16位）
 * @return {number}
 */
export function getRandomNum(len: number) {
    // 取整数
    len = Math.floor(len)
    const temp = (Math.random() + "").split(".")[1]
    return temp.slice(0, len)

}

